using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("AssetCache")]
	public class AssetCache : MonoClass
	{
		[Attribute38("AssetCache.CachedAsset")]
		public class CachedAsset : MonoClass
		{
			public object m_assetObject => method_3<object>("m_assetObject");

			public Asset m_asset => method_3<Asset>("m_asset");

			public long m_createdTimestamp => method_2<long>("m_createdTimestamp");

			public long m_lastRequestTimestamp => method_2<long>("m_lastRequestTimestamp");

			public bool m_persistent => method_2<bool>("m_persistent");

			public CachedAsset(IntPtr address, string className)
				: base(address, className)
			{
			}

			public CachedAsset(IntPtr address)
				: this(address, "CachedAsset")
			{
			}

			public UnityObject GetAssetObject()
			{
				return method_14<UnityObject>("GetAssetObject", Array.Empty<object>());
			}

			public void SetAssetObject(object asset)
			{
				method_8("SetAssetObject", asset);
			}

			public Asset GetAsset()
			{
				return method_14<Asset>("GetAsset", Array.Empty<object>());
			}

			public void SetAsset(Asset asset)
			{
				method_8("SetAsset", asset);
			}

			public long GetCreatedTimestamp()
			{
				return method_11<long>("GetCreatedTimestamp", Array.Empty<object>());
			}

			public void SetCreatedTimestamp(long timestamp)
			{
				method_8("SetCreatedTimestamp", timestamp);
			}

			public long GetLastRequestTimestamp()
			{
				return method_11<long>("GetLastRequestTimestamp", Array.Empty<object>());
			}

			public void SetLastRequestTimestamp(long timestamp)
			{
				method_8("SetLastRequestTimestamp", timestamp);
			}

			public bool IsPersistent()
			{
				return method_11<bool>("IsPersistent", Array.Empty<object>());
			}

			public void SetPersistent(bool persistent)
			{
				method_8("SetPersistent", persistent);
			}

			public void UnloadAssetObject()
			{
				method_8("UnloadAssetObject");
			}
		}

		[Attribute38("AssetCache.ObjectRequester")]
		public class ObjectRequester : MonoClass
		{
			public object m_callbackData => method_3<object>("m_callbackData");

			public ObjectRequester(IntPtr address, string className)
				: base(address, className)
			{
			}

			public ObjectRequester(IntPtr address)
				: this(address, "ObjectRequester")
			{
			}
		}

		[Attribute38("AssetCache.GameObjectRequester")]
		public class GameObjectRequester : MonoClass
		{
			public object m_callbackData => method_3<object>("m_callbackData");

			public GameObjectRequester(IntPtr address, string className)
				: base(address, className)
			{
			}

			public GameObjectRequester(IntPtr address)
				: this(address, "GameObjectRequester")
			{
			}
		}

		[Attribute38("AssetCache.CacheRequest")]
		public class CacheRequest : MonoClass
		{
			public long m_createdTimestamp => method_2<long>("m_createdTimestamp");

			public long m_lastRequestTimestamp => method_2<long>("m_lastRequestTimestamp");

			public bool m_persistent => method_2<bool>("m_persistent");

			public bool m_complete => method_2<bool>("m_complete");

			public bool m_success => method_2<bool>("m_success");

			public CacheRequest(IntPtr address, string className)
				: base(address, className)
			{
			}

			public CacheRequest(IntPtr address)
				: this(address, "CacheRequest")
			{
			}

			public long GetCreatedTimestamp()
			{
				return method_11<long>("GetCreatedTimestamp", Array.Empty<object>());
			}

			public void SetCreatedTimestamp(long timestamp)
			{
				method_8("SetCreatedTimestamp", timestamp);
			}

			public long GetLastRequestTimestamp()
			{
				return method_11<long>("GetLastRequestTimestamp", Array.Empty<object>());
			}

			public void SetLastRequestTimestamp(long timestamp)
			{
				method_8("SetLastRequestTimestamp", timestamp);
			}

			public bool IsPersistent()
			{
				return method_11<bool>("IsPersistent", Array.Empty<object>());
			}

			public void SetPersistent(bool persistent)
			{
				method_8("SetPersistent", persistent);
			}

			public bool IsComplete()
			{
				return method_11<bool>("IsComplete", Array.Empty<object>());
			}

			public void SetComplete(bool complete)
			{
				method_8("SetComplete", complete);
			}

			public bool IsSuccess()
			{
				return method_11<bool>("IsSuccess", Array.Empty<object>());
			}

			public void SetSuccess(bool success)
			{
				method_8("SetSuccess", success);
			}

			public int GetRequestCount()
			{
				return method_11<int>("GetRequestCount", Array.Empty<object>());
			}

			public void OnLoadSucceeded()
			{
				method_8("OnLoadSucceeded");
			}

			public void OnLoadFailed(AssetReference assetRef)
			{
				method_8("OnLoadFailed", assetRef);
			}

			public bool DidSucceed()
			{
				return method_11<bool>("DidSucceed", Array.Empty<object>());
			}

			public bool DidFail()
			{
				return method_11<bool>("DidFail", Array.Empty<object>());
			}
		}

		[Attribute38("AssetCache.ObjectCacheRequest")]
		public class ObjectCacheRequest : CacheRequest
		{
			public List<ObjectRequester> m_requesters => method_3<Class271<ObjectRequester>>("m_requesters")?.method_25();

			public ObjectCacheRequest(IntPtr address, string className)
				: base(address, className)
			{
			}

			public ObjectCacheRequest(IntPtr address)
				: this(address, "ObjectCacheRequest")
			{
			}

			public List<ObjectRequester> GetRequesters()
			{
				return method_14<Class271<ObjectRequester>>("GetRequesters", Array.Empty<object>())?.method_25();
			}

			public void OnLoadComplete(AssetReference assetRef, object asset)
			{
				method_8("OnLoadComplete", assetRef, asset);
			}

			public new void OnLoadFailed(AssetReference assetRef)
			{
				method_8("OnLoadFailed", assetRef);
			}

			public new int GetRequestCount()
			{
				return method_11<int>("GetRequestCount", Array.Empty<object>());
			}
		}

		[Attribute38("AssetCache.PrefabCacheRequest")]
		public class PrefabCacheRequest : CacheRequest
		{
			public List<GameObjectRequester> m_requesters => method_3<Class271<GameObjectRequester>>("m_requesters")?.method_25();

			public PrefabCacheRequest(IntPtr address, string className)
				: base(address, className)
			{
			}

			public PrefabCacheRequest(IntPtr address)
				: this(address, "PrefabCacheRequest")
			{
			}

			public List<GameObjectRequester> GetRequesters()
			{
				return method_14<Class271<GameObjectRequester>>("GetRequesters", Array.Empty<object>())?.method_25();
			}

			public new void OnLoadFailed(AssetReference assetRef)
			{
				method_8("OnLoadFailed", assetRef);
			}

			public new int GetRequestCount()
			{
				return method_11<int>("GetRequestCount", Array.Empty<object>());
			}
		}

		public static int MAX_ASSETS_PER_FAMILY => MonoClass.smethod_6<int>(TritonHs.MainAssemblyPath, "", "AssetCache", "MAX_ASSETS_PER_FAMILY");

		public static int MAX_ASSETS_PER_FAMILY_LOW => MonoClass.smethod_6<int>(TritonHs.MainAssemblyPath, "", "AssetCache", "MAX_ASSETS_PER_FAMILY_LOW");

		public int m_persistentCount => method_2<int>("m_persistentCount");

		public static long s_cacheClearTime => MonoClass.smethod_6<long>(TritonHs.MainAssemblyPath, "", "AssetCache", "s_cacheClearTime");

		public AssetCache(IntPtr address, string className)
			: base(address, className)
		{
		}

		public AssetCache(IntPtr address)
			: this(address, "AssetCache")
		{
		}

		public static void Initialize()
		{
			MonoClass.smethod_17(TritonHs.MainAssemblyPath, "", "AssetCache", "Initialize");
		}

		public static CachedAsset Find(Asset asset)
		{
			return MonoClass.smethod_15<CachedAsset>(TritonHs.MainAssemblyPath, "", "AssetCache", "Find", new object[1] { asset });
		}

		public static bool HasItem(Asset asset)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "AssetCache", "HasItem", new object[1] { asset });
		}

		public static void Add(Asset asset, CachedAsset item)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "Add", asset, item);
		}

		public static long GetCacheClearTime()
		{
			return MonoClass.smethod_14<long>(TritonHs.MainAssemblyPath, "", "AssetCache", "GetCacheClearTime", Array.Empty<object>());
		}

		public static bool IsLoading(AssetReference assetRef)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "AssetCache", "IsLoading", new object[1] { assetRef });
		}

		public static void StartLoading(AssetReference assetRef)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "StartLoading", assetRef);
		}

		public static void StopLoading(AssetReference assetRef)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "StopLoading", assetRef);
		}

		public static void PrintCachedAssets()
		{
			MonoClass.smethod_17(TritonHs.MainAssemblyPath, "", "AssetCache", "PrintCachedAssets");
		}

		public static void ClearAllCaches(bool clearPersistent, bool clearLoading)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearAllCaches", clearPersistent, clearLoading);
		}

		public static void ClearAllCachesSince(long sinceTimestamp)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearAllCachesSince", sinceTimestamp);
		}

		public static void ClearAllCachesBetween(long startTimestamp, long endTimestamp)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearAllCachesBetween", startTimestamp, endTimestamp);
		}

		public static void ClearAllCachesFailedRequests()
		{
			MonoClass.smethod_17(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearAllCachesFailedRequests");
		}

		public static void ForceClearAllCaches()
		{
			MonoClass.smethod_17(TritonHs.MainAssemblyPath, "", "AssetCache", "ForceClearAllCaches");
		}

		public static void ClearAssetFamilyCache(AssetFamily family, bool clearPersistent, bool clearLoading)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearAssetFamilyCache", family, clearPersistent, clearLoading);
		}

		public static void ClearSound(AssetReference assetRef)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearSound", assetRef);
		}

		public static void ClearGameObject(AssetReference assetRef)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearGameObject", assetRef);
		}

		public static void ClearLocalizedAssets()
		{
			MonoClass.smethod_17(TritonHs.MainAssemblyPath, "", "AssetCache", "ClearLocalizedAssets");
		}

		public static bool HasRequest(Asset asset)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "AssetCache", "HasRequest", new object[1] { asset });
		}

		public static void AddRequest(Asset asset, CacheRequest request)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "AssetCache", "AddRequest", asset, request);
		}

		public static bool RemoveRequest(Asset asset)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "AssetCache", "RemoveRequest", new object[1] { asset });
		}

		public CachedAsset GetItem(AssetReference key)
		{
			return method_14<CachedAsset>("GetItem", new object[1] { key });
		}

		public bool HasItem(AssetReference key)
		{
			return method_11<bool>("HasItem", new object[1] { key });
		}

		public void AddItem(AssetReference assetRef, CachedAsset item)
		{
			method_8("AddItem", assetRef, item);
		}

		public void RemoveLeastRequestedItem()
		{
			method_8("RemoveLeastRequestedItem");
		}

		public void Clear(bool clearPersistent, bool clearLoading)
		{
			method_8("Clear", clearPersistent, clearLoading);
		}

		public void ForceClear()
		{
			method_8("ForceClear");
		}

		public void ClearItemsBetween(long startTimestamp, long endTimestamp)
		{
			method_8("ClearItemsBetween", startTimestamp, endTimestamp);
		}

		public bool ClearItem(string key)
		{
			return method_11<bool>("ClearItem", new object[1] { key });
		}

		public void ClearAllFailedRequests()
		{
			method_8("ClearAllFailedRequests");
		}

		public void ClearLocalizedItems()
		{
			method_8("ClearLocalizedItems");
		}

		public bool HasRequest(string key)
		{
			return method_11<bool>("HasRequest", new object[1] { key });
		}

		public void AddRequest(string key, CacheRequest request)
		{
			method_8("AddRequest", key, request);
		}

		public bool RemoveRequest(string key)
		{
			return method_11<bool>("RemoveRequest", new object[1] { key });
		}
	}
}
